home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_b / snow.txt < prev    next >
Text File  |  1995-04-22  |  4KB  |  1 lines

  1.   __________________________________¢¢  COMMENTS ON THE "SNOW.ACT" PROGRAM¢  __________________________________¢¢¢   I was very happy to read your¢programming challenge, because the¢snow problem was one I solved a few¢months ago! In a couple of hours, my¢ACTION! cartridge and I managed to¢produce an illusion that was good¢enough to fool everyone: people who¢didn't know about the program thought¢my TV was on the fritz, and the others¢thought I was pulling their leg!¢¢   The basic idea is simplicity ¢itself. I created an oversize display¢to eliminate the black border; each¢line is in GR.8 mode with the LMS¢option set; this way, I can instantly¢change all 320 pixels on a line by¢pointing its address somewhere else.¢I created a 304-byte array, filled¢with values taken from the Atari's¢random number generator at 53770.¢To make a totally different display,¢I simply have to modify the random¢array and reload each line with a new¢address, pointing somewhere inside¢that array. This is easy enough for¢ACTION! to do once each 1/60th of a¢second, so that the end result is a¢constantly-changing display. Compare¢to the normal method of putting random¢bytes at random locations onscreen:¢that method would update the display¢only partially before the TV scan¢process caught up with the processor,¢giving a much less dynamic display.¢(Reason: only part of each screen¢would be different from the previous¢one, and your eye wouldn't be fooled)¢¢   Now that I've explained what goes¢on behind the scenes, the program¢itself is quite easy to read, even¢if you haven't seen ACTION! code¢before. I dimension three arrays and¢set their location in memory so as to¢be sure they don't get split by a 4K¢boundary (a no-no with the ANTIC chip).¢Same thing goes for other variables¢like 'vcount' and 'dlist'; referencing¢such variables makes a program much¢more readable than using straight¢addresses.¢¢   The PROCedure MAKE_FLAKES stuffs¢random values in the 'flakes' array.¢Notice I loop from 0 to 151, storing¢two values in each pass: this is¢faster than going 304 times through¢a single store. When you want to¢update the screen every frame, you've¢got to watch those machine cycles!¢¢   MAKE_DISPLAY builds a custom¢display list from scratch. Each line¢will point to the address (flakes+¢random). Since 'random' returns a¢number between 0 and 255, each line¢will then seem to have its own set of¢random pixels. Nothing will prevent¢two consecutive lines from pointing to¢the same address, but since we rebuild¢our display each 1/60 of a second the¢effect will go by unnoticed.¢¢   Once the display list is done, we¢tell ANTIC where it's located and¢change the colors to have a nice,¢high-contrast black-and-white display.¢Setting ANTIC to "wide playfield" mode,¢along with having 228 lines of data,¢effectively removes the border from the¢TV picture. (The effect is much better¢on a TV screen than on a monitor)¢The main program sets everything up,¢turns on a white noise-type sound, and¢starts changing the screen every TV¢frame. Notice how easy it was to do¢the vertical roll bar: if a line is¢inside the bar, I simply point to 48¢bytes of blanks instead of 48 bytes of¢random data. This adds almost no¢processing time, yet greatly increases¢the realism of the simulation.¢¢   There you have it folks, yet another¢shining example of the Atari supremacy¢in the graphics field! We managed to¢have our faithful, unexpanded 8-bit do¢tricks that only a $999+ computer (ST¢or Amiga) can! Not bad for a 7-year old¢machine, eh?¢                                    \¢                      Charles Blaquiere¢¢(can you typeset the accent in my name?¢I'd be sooo grateful!)¢LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL